Comprensión de listas

El poder de Python va mucho más allá de lo que a primera vista podemos imaginar.

La comprensión de listas, del inglés list comprehensions , es una funcionalidad que nos permite crear listas avanzadas en una misma línea de código. Esto se ve mucho mejor en la práctica, así que a lo largo de esta lección vamos a trabajar distintos ejemplos.

Ejemplo 1) Crear una lista con las letras de una palabra


In [5]:
# Método tradicional
lista = []
for letra in 'casa':
    lista.append(letra)
print(lista)


['c', 'a', 's', 'a']

In [6]:
# Con comprensión de listas
lista = [letra for letra in 'casa']
print(lista)


['c', 'a', 's', 'a']

Como vemos, gracias a la comprensión de listas podemos indicar directamente cada elemento que va a formar la lista, en este caso la letra, a la vez que definimos el for:

lista = [letra for letra in 'casa']  # La lista está formada por cada letra que recorremos en el for

Ejemplo 2) Crear una lista con las potencias de 2 de los primeros 10 números


In [7]:
# Método tradicional
lista = []
for numero in range(0,11):
    lista.append(numero**2)
print(lista)


[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

In [8]:
# Con comprensión de listas
lista = [numero**2 for numero in  range(0,11)]
print(lista)


[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

De este ejemplo podemos aprender que es posible modificar al vuelo los elementos que van a formar la lista.

Ejemplo 3) Crear una lista con los todos los múltiples de 2 entre 0 y 10


In [11]:
# Método tradicional
lista = []
for numero in range(0,11):
    if numero % 2 == 0:
        lista.append(numero)
print(lista)


[0, 2, 4, 6, 8, 10]

In [10]:
# Con comprensión de listas
lista = [numero for numero in range(0,11) if numero % 2 == 0 ]
print(lista)


[0, 2, 4, 6, 8, 10]

En este caso podemos observar que incluso podemos marcar una condición justo al final para añadir o no el elemento en la lista.

[numero for numero in range(0,11) if numero % 2 == 0 ] # Añadir los números del 0 al 10 cuando su módulo de 2 sea 0

Ejemplo 4) Crear una lista de pares a partir de otra lista creada con las potencias de 2 de los primeros 10 números


In [12]:
# Método tradicional
lista = []
for numero in range(0,11):
    lista.append(numero**2)
    
pares = []   
for numero in lista:
    if numero % 2 == 0:
        pares.append(numero)
        
print(pares)


[0, 4, 16, 36, 64, 100]

In [17]:
# Con comprensión de listas
lista = [numero for numero in [numero**2 for numero in range(0,11)] if numero % 2 == 0 ]
print(lista)


[0, 4, 16, 36, 64, 100]

Crear listas a partir de listas anidadas nos permite llevar la comprensión de listas al siguiente nivel y además no hay un límite.

Por ahora te animo a hacer tus propias pruebas y practicar, ya que de ahora en adelante haremos uso de la comprensión de listas en ejemplos y otras funcionalidades avanzadas.